package com.link.base.base.enterprise.service;

import com.link.base.base.common.model.Image;
import com.link.base.base.enterprise.model.Enterprise;
import com.link.core.basic.model.CallParam;
import com.link.core.basic.service.BasicService;
import com.link.core.basic.service.BasicServiceException;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author l update 18.11.05
 */
public interface EnterpriseService extends BasicService<Enterprise> {

    /**
     * 初始化企业
     * @param record
     * @throws BasicServiceException
     */
    public void initializeCompany(CallParam record) throws BasicServiceException;

    /**
     * 删除企业
     * @param record
     * @throws Exception
     */
    public void deleteCompany(CallParam record) throws Exception;

    /**
     * 通过企业编号查询一个企业信息
     * @param code 企业编号
     * @return Enterprise
     * @throws Exception
     */
    public Enterprise queryByCode(Long code) throws Exception;

    /**
     * 通过企业编号查询一个企业信息
     * 用来给小程序查询企业信息,由于匿名登录需要查询,所以重载方法,逻辑与之前的方法完全一致
     * @author : LiQun
     * @param code 企业编号
     * @return Enterprise
     * @throws Exception
     * @date : 2018/10/9
     */
    public Enterprise queryByCode(Enterprise code) throws Exception;

    /**
     * 上传企业二维码图片
     * @param myfiles
     * @return List
     * @throws BasicServiceException
     */
    public List<Image> imgUpload(List<MultipartFile> myfiles) throws BasicServiceException;

    /**
     * 更新二维码图片ID
     * @param record
     * @param list
     * @throws BasicServiceException
     */
    public void qrCodeImageUpate(Enterprise record, List<Image> list) throws BasicServiceException;

    /**
     * <p>企点</p>
     * 第三方授权信息更新
     *
     * @param record
     * @throws Exception
     */
    public void qidianAuthUpdate(Enterprise record) throws Exception;

    /**
     * <p>企点</p>
     * 更新授权方的接口调用凭证
     * @param record
     * @throws Exception
     */
    public void authAccessTokenUpdate(Enterprise record) throws Exception;

    /**
     * 查询所有关联了企点的企业
     * @return List
     * @throws Exception
     */
    public List<Enterprise> queryQidianEnt() throws Exception;

    /**
     * 根据授权方appid查询企业
     * @param authAppid
     * @return List
     * @throws Exception
     */
    public List<Enterprise> queryByAuthAppidPage(String authAppid) throws Exception;

    /**
     * 查询当前登录用户所属企业的企点token
     * @return String
     * @throws Exception
     */
    public String queryQiDianToken() throws Exception;

    /**
     * 获取启用严格安全模式的账套编码数组, 并添加到redis缓存
     *
     * @return String[]
     */
    public String[] loadCorpidsWhichActiveStrictSecurityMode2Redis();

    /**
     * 更新企业认证图片
     * @param enterprise
     * @throws BasicServiceException
     */
    public void updateVoucherImg(Enterprise enterprise) throws BasicServiceException;

    /**
     * 根据corpid获取企业信息
     *
     * @author : LiQun
     * @param code 用户corpid即企业编码
     * @return 企业信息
     * @throws Exception 异常
     * @date : 下午3:25 2018/5/22
     */
    public Enterprise getEnterpriseInfo(Long code) throws Exception;


    /***
     * 初始化企业信息
     * @param entity
     * @param callParam
     * @throws Exception
     */
    public void initEnterpriseInfo(Enterprise entity, CallParam callParam) throws Exception;

    /***
     * 更新企业对账单参数
     * @param enterprise
     * @throws Exception
     */
    public void updateBillStatementParam(Enterprise enterprise) throws Exception;

    /***
     * 查询指定条件下的企业信息
     * @param enterprise
     * @return List
     * @throws Exception
     */
    public List<Enterprise> queryAllByAssCondition(Enterprise enterprise) throws Exception;

    /***
     * 查询指定条件下的企业信息
     * @param queryEnp
     * @return List
     */
    public List<Enterprise> getEnterpriseByUserCode(Enterprise queryEnp);
}
